#include "cmsis_os2.h"
#include "lvgl.h"


extern osMutexId_t LvglMutexHandle;

static void keyboard_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
    if(code == LV_EVENT_VALUE_CHANGED)
    {
        /* 获取键盘按钮索引 */
        uint16_t id = lv_btnmatrix_get_selected_btn(target);
        /* 获取按钮文本 */
        const char *txt = lv_btnmatrix_get_btn_text(target, id);
        if(strcmp(txt, LV_SYMBOL_KEYBOARD) == 0) /* 判断是不是键盘图标被按下 */
        {
            /* 获取当前键盘模式，判断是否为数字模式 */
            if(lv_keyboard_get_mode(target) == LV_KEYBOARD_MODE_NUMBER) 
            {
                /* 如果是数字模式，则切换为小写字母模式 */
                lv_keyboard_set_mode(target, LV_KEYBOARD_MODE_TEXT_LOWER);
            }
            else
            {
                /* 不是数字模式，则切换为数字模式 */
                lv_keyboard_set_mode(target, LV_KEYBOARD_MODE_NUMBER); 
            }
        }
    }
}

void StartLvglTask(void *argument)
{
    osMutexAcquire(LvglMutexHandle, osWaitForever);

    int32_t  with = lv_obj_get_width(lv_scr_act());
    int32_t  height = lv_obj_get_height(lv_scr_act());

    lv_obj_t* keyboard = lv_keyboard_create(lv_scr_act());      /* 定义并创建键盘 */
    lv_obj_t* textarea = lv_textarea_create(lv_scr_act());      /* 定义并创建文本框 */
    lv_obj_set_width(textarea, with - 10);                      /* 设置文本框宽度 */
    lv_obj_set_height(textarea, height / 2 - 10);               /* 设置文本框高度 */
    lv_obj_align(textarea, LV_ALIGN_TOP_LEFT, 0, 0);            /* 设置文本框位置 */
    lv_keyboard_set_textarea(keyboard, textarea);               /* 为键盘指定一个文本区域 */
    lv_keyboard_set_popovers(keyboard, true);
    lv_obj_add_event_cb(keyboard, keyboard_event_cb, LV_EVENT_VALUE_CHANGED, NULL); /* 设置键盘事件回调 */

    osMutexRelease(LvglMutexHandle);

    for(;;)
    {
        osMutexAcquire(LvglMutexHandle, osWaitForever);
        lv_timer_handler();
        osMutexRelease(LvglMutexHandle);
        osDelay(5);
    }
}
